//handler 中处理的都是具体函数内容  根据路由的选择跳转到对应的处理函数中


//引入连接数据库的 对象
const db = require('../db/index') //此时连接数据库了


//导入bcryptjs 密码明文 转 暗文 加密包
const bcrypt = require('bcryptjs')



//因为安装了token包 所以 可以导入了
const jwt = require('jsonwebtoken')
//导入全局配置文件  为加密程序使用
const config = require('../config')


exports.regUser = (req,res) =>{
    //req是 用户提交到服务器的 参数 
    const userinfo = req.body //body 是接口选择解析的 字段方式   



    
    //【这就是对 客户端请求的数据 req进行解析的过程】
    // if(!userinfo.username || !userinfo.password){
    //     // return res.send({ status:1,message:'用户或者密码不合法,有为空的内容提交了 '})
    //     return res.cc('用户或者密码不合法,有为空的内容提交')
    // }
    // console.log(userinfo)







    //定义查询的sql语句
     const sqlStr ='select * from ev_users where username=?'
     db.query(sqlStr,userinfo.username,(err,results) => {
        // console.log(userinfo.username)
        if(err) {
            // return res.send({ status:1,message:err.message })
            return res.cc(err)
        }

        //  console.log(results)
        //  console.log(results.length)
    //     //判断用户名是否被占用
        if(results.length > 0){
            //return res.send({ status:1,message:'用户名重复 ，不允许有两个 相同的用户名！'})
              return res.cc('用户名重复 ，不允许有两个 相同的用户名！!!!')
        }



        // console.log(userinfo.password)
        //调用bcrypt.hashSync() 对密码进行加密
        userinfo.password = bcrypt.hashSync(userinfo.password,10)
        // console.log(userinfo.password)

        const sql = "insert into ev_users set ?"
        db.query(sql,{username:userinfo.username,password:userinfo.password,nickname:userinfo.nickname},(err,results) =>{

            //前两个 是判断 不符合条件 直接 到第三句话
            //判断SQL语句是否执行成功
            if(err) return res.cc(err)
            //判断影响的行数   //res.send({ status:1,message:'注册用户失败，请稍后再试！！！' })
            if(results.affectedRows !==1) return res.cc('注册用户失败，请稍后再试！！！')
            //第三句话 注册成功
            // res.send({ status:0 , message:'用户注册成功' })
            res.cc('注册新用户成功',0)
        })

      

     })


}


exports.login = (req,res) =>{
    
    const userinfo = req.body
    console.log(userinfo)
    const sql ='select * from ev_users where username=?'
    
    db.query(sql,userinfo.username,(err,results) =>{
        if(err) return res.cc(err)
            console.log(results)
        if(results.length !==1 ) return res.cc('登录失败！！')
    
        //判断密码  因为是 暗文密码 所以 不能直接判断 需要用暗文进行比较  第一个参数 是用户提交的密码 第二个参数 是 数据库密码
        //bcrypt 这个三方库 可以自己进行解密 然后判断密码 是否一致
        //返回的是  布尔值
        const compareResult = bcrypt.compareSync(userinfo.password,results[0].password)
        if(!compareResult) return res.cc('密码不正确',1)

        //生成token字符串
        const user = {...results[0],password:'',user_pic:''} //结果值就是 查询到的用户名那条数据
                                    //不希望密码和头像图片 被制作成token信息 这是为了 防止 被别人破解
        
        
        //对用户进行加密，生成token字符串
        const tokenStr = jwt.sign(user,config.jwtSecretKey,{ expiresIn: config.expiresIn })
        console.log(tokenStr)
        
        res.send({
                status:0,
                message:'用户登录成功 返回一个token值 10小时 有效期',
                token:'Bearer '+ tokenStr,  //加一个前缀 看起来 更能清楚 后面 是 token值
        })
        
    })
    
}